package com.atguigu.srb.base.exception;

import com.atguigu.srb.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice //异常代理：当controller接口调用出现异常时由 当前的handler捕获处理
@Slf4j
public class GlobalExceptionHandler {
    //类似 远程调用的降级方法(远程调用成功 降级方法不生效， 远程调用失败 会使用降级方法返回结果)
    @ExceptionHandler(value = Exception.class)//最大异常
    public R exception(Exception e){
        //ExceptionUtils.getStackTrace(e) 获取完整的异常堆栈日志
        log.error("出现异常，异常原因：{}", ExceptionUtils.getStackTrace(e));
//        System.out.println(); 项目无法控制上线后日志是否输出
        return R.fail();
    }
    @ExceptionHandler(value = SrbException.class)//最大异常
    public R exception(SrbException e){
        //ExceptionUtils.getStackTrace(e) 获取完整的异常堆栈日志
        log.error("出现异常，异常原因：{}", ExceptionUtils.getStackTrace(e));
//        System.out.println(); 项目无法控制上线后日志是否输出
        return R.fail().code(e.getCode()).message(e.getMessage());
    }

}
